AWS CDK で CloudWatch Contributor Insights for DynamoDB を GSI に対して簡単に設定可能になりました

AWS CDK で CloudWatch Contributor Insights for DynamoDB を GSI に対して簡単に設定可能になりました

Clock Icon2024.10.22

こんにちは、製造ビジネステクノロジー部の若槻です。

AWS CDK の最近のリリースである v2.163.0 で、下記のアップデートが追加されていました。

dynamodb: enable contributor insights for global secondary index (#30560) (799b541), closes #15671

Amazon DynamoDB には CloudWatch Contributor Insights for DynamoDB というモニタリング機能があり、これによりテーブルやインデックスで頻繁にアクセスやスロットリングが発生しているキーを分析することができます。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/contributorinsights.html

そして今回の AWS CDK のアップデートにより、GSI (global secondary index) に対する CloudWatch Contributor Insights for DynamoDB を L2 Construct により簡単に設定可能になりました。

試してみた

GSI で Contributor Insights を設定しない場合

まず、Contributor Insights を設定したテーブルと、設定をしていない GSI を Table Construct Class で作成してみます。

lib/sample-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';

export class SampleApp extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    const table = new dynamodb.Table(this, 'Table', {
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      contributorInsightsEnabled: true,
    });

    table.addGlobalSecondaryIndex({
      indexName: 'test-index',
      partitionKey: {
        name: 'subId',
        type: dynamodb.AttributeType.STRING,
      },
    });
  }
}

上記 CDK コードをデプロイすると、テーブルの Contributor Insights グラフが表示されています。

Manage CloudWatch Contributor Insights メニューを開くと、テーブルに対して Contributor Insights が有効になっており、インデックスに対しては有効になっていないことが確認できます。

CDK パッケージのアップデート

AWS CDK モジュールを v2.163.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest

GSI で Contributor Insights を設定する

GSI に対しても Contributor Insights を有効にするには、テーブルと同様に contributorInsightsEnabled プロパティを true に設定します。

lib/sample-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';

export class SampleApp extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    const table = new dynamodb.Table(this, 'Table', {
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      contributorInsightsEnabled: true,
    });

    table.addGlobalSecondaryIndex({
      indexName: 'test-index',
      partitionKey: {
        name: 'subId',
        type: dynamodb.AttributeType.STRING,
      },
      contributorInsightsEnabled: true, // 追加されたプロパティ
    });
  }
}

上記 CDK コードをデプロイすると、テーブルに加えてインデックスの Contributor Insights グラフが表示されるようになりました。

Manage CloudWatch Contributor Insights メニューを開くと、テーブルとインデックスの両方に対して Contributor Insights が有効になっていることが確認できます。

Contributor Insights の動作確認

GSI にクエリを行うと Contributor Insights グラフに反映されることを確認してみます。

テーブルにデータを追加します。

aws dynamodb put-item \
    --table-name $TABLE_NAME \
    --item '{
        "id": {"S": "sample-id"},
        "subId": {"S": "sample-subId"},
        "attribute1": {"S": "sample-value1"},
        "attribute2": {"N": "123"}
    }'

GSI に対してクエリを行います。

aws dynamodb query \
    --table-name $TABLE_NAME \
    --index-name test-index \
    --key-condition-expression "subId = :subId" \
    --expression-attribute-values '{":subId":{"S":"sample-subId"}}'

1 分ほど待つと、グラフにクエリによるキーへのアクセスが表示されるようになりました。

TableV2 の GSI ではまだ使えない

ちなみに TableV2 Construct Class では、テーブルに対しては contributorInsights プロパティが利用可能ですが、インデックスに対してはまだ利用不可であるようです。

lib/sample-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';

export class SampleApp extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    const tablev2 = new dynamodb.TableV2(this, 'TableV2', {
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      contributorInsights: true, // プロパティが利用可能
    });

    tablev2.addGlobalSecondaryIndex({
      indexName: 'test-index',
      partitionKey: {
        name: 'subId',
        type: dynamodb.AttributeType.STRING,
      },
      contributorInsights: true, // プロパティが利用不可
    });
  }
}

TableV2 に実装されて Table に実装されていないプロパティが多い印象ですが、Contributor Insights に関してはそうはなっていないようです。

おわりに

AWS CDK で CloudWatch Contributor Insights for DynamoDB を GSI に対して簡単に設定可能になったのでご紹介しました。

Contributor Insights 自体は 2020 年に GA されている機能ですが、ようやく CDK の L2 Construct でも利用可能になったというアップデートでした。
https://dev.classmethod.jp/articles/contributor-insights-for-dynamodb-ga/

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.